home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / alv.sun / alv.lha / src / blend.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-08  |  1.8 KB  |  78 lines

  1. #include <stdio.h>
  2. #include "defs.h"
  3.  
  4. har           *progname;
  5. ixrect        *pr1, *pr2;
  6.  
  7. #ifdef STANDALONE
  8. ain(argc, argv, envp)
  9. #else
  10. lend_main(argc, argv, envp)
  11. #endif
  12.     int             argc;
  13.     char          **argv;
  14.     char          **envp;
  15. {
  16.     register int    i, j;
  17.     int             pix1, pix2, outpix;
  18.     FILE           *f1, *f2;
  19.     float           wt1, wt2;
  20.  
  21.     f1 = stdin;
  22.     f2 = stdin;
  23.     wt1 = wt2 = 1.;
  24.     progname = strsave(argv[0]);
  25.     parse_profile(&argc, argv, envp);
  26.  
  27.     while ((gc = getopt(argc, argv, "f:w:F:W:")) != EOF)
  28.         switch (gc) {
  29.         case 'f':
  30.             if ((f1 = fopen(optarg, "r")) == NULL)
  31.                 error("Can't open %s\n", optarg);
  32.             break;
  33.         case 'F':
  34.             if ((f2 = fopen(optarg, "r")) == NULL)
  35.                 error("Can't open %s\n", optarg);
  36.             break;
  37.         case 'w':
  38.             wt1 = atof(optarg);
  39.             break;
  40.         case 'W':
  41.             wt2 = atof(optarg);
  42.             break;
  43.         case '?':
  44.             errflag++;
  45.             break;
  46.         }
  47.  
  48.     if (errflag)
  49.         error((char *) 0, "Usage: %s: [-f filename1] [-w weighting1] [-F filename2] [-W weighting2] [outfile] \n", progname);
  50.  
  51.     for (stream = 0; optind < argc; stream++, optind++)
  52.         if (stream == 0 && strcmp(argv[optind], "-") != 0)
  53.             if (freopen(argv[optind], "w", stdout) == NULL)
  54.                 error("%s %s", PR_IO_ERR_INFILE, argv[optind]);
  55.  
  56.     if (f1 == f2)
  57.         error("Can't blend an image with itself\n");
  58.  
  59.     if ((pr1 = pr_load(f1, NULL)) == NULL)
  60.         error(PR_IO_ERR_RASREAD);
  61.  
  62.     if ((pr2 = pr_load(f2, NULL)) == NULL)
  63.         error(PR_IO_ERR_RASREAD);
  64.  
  65.     if (pr1->pr_size.x != pr2->pr_size.x || pr1->pr_size.y != pr2->pr_size.y || pr1->pr_depth != pr2->pr_depth)
  66.         error("Image dimensions not equal\n");
  67.  
  68.     for (j = 0; j < pr1->pr_size.y; j++)
  69.         for (i = 0; i < pr1->pr_size.x; i++) {
  70.             pix1 = pr_get(pr1, i, j);
  71.             pix2 = pr_get(pr2, i, j);
  72.             outpix = (int) (((float) pix1 * wt1 + (float) pix2 * wt2) / (wt1 + wt2));
  73.             pr_put(pr1, i, j, outpix);
  74.         }
  75.  
  76.     pr_dump(pr1, stdout, NULL, RT_STANDARD, 0);
  77. }
  78.